
// function getSalary(pers){
//     let base = 10000; // 硬编码
//     return base+pers
// }

// console.log(getSalary(3000))

// 改造柯里化

// function getSalary(base){
//     return function(pers){
//         return base+pers
//     }
// }

// ES6
// let getSalary = base => (pers => base + pers)

// const getSalaryLevel1 = getSalary(10000)
// const getSalaryLevel2 = getSalary(14000)

// console.log(getSalaryLevel1(200))
// console.log(getSalaryLevel1(2000))
// console.log(getSalaryLevel2(2000))

const _ = require('lodash')

// function add(x,y,z){
//     return x+y+z
// }

// const addCurrr = _.curry(add)

// console.log(add(1,2,3))
// console.log(addCurrr(1,2,3))
// console.log(addCurrr(1)(2,3))
// console.log(addCurrr(1,2)(3))

// 匹配空格

// console.log('122 31 3 aaa'.match(/\s+/g))

// function match(reg){
//     return function(str){
//         return str.match(reg)
//     }
// }

// const matchSpace = match(/\s+/g);
// const matchNum = match(/\d+/g);
// console.log(matchSpace('213233 3424 45 tuytuy tyutuy tyut uy'))
// console.log(matchNum('213233sss 34s24 45 tuytuy tyutuy tyut uy'))

// const filter = _.curry((array, fn)=> array.filter(fn))
// console.log(filter(['123 222','sssss','q1 2'],matchNum))

// 模拟_.curry()实现

// console.log(add.length)
const add = function(x,y,z,a){
    return x+y+z-a;
}
// function curry(fn){
//     return function(){
//         return  `${fn.length} ==== ${Array.from(arguments)} ==== ${Array.from(arguments).length}`    
//     }
// }
// console.log(curry(add)(1,2))



function curry(fn){
    return function curriedFn(...arg){
        console.log(Array.from(arguments)) // 拼装参数
        if(fn.length > Array.from(arguments).length){
            return function (){
                console.log(...arg.concat(Array.from(arguments)))
                return curriedFn(...arg.concat(Array.from(arguments)))
            }
        }
        return fn(...Array.from(arguments))
    }
}
console.log('fun',curry(add)(1)(2)(3,6))